package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import datatypes.*;


public class PersistenciaVentaAgencia implements IPersistenciaVentaAgencia {
	
	private static PersistenciaVentaAgencia instance =null; //variable para crear la instancia de la peristencia venta agencia	
	private static Connection conn;
	private PersistenciaVentaAgencia() {
		
		try {
			Context initContext = new InitialContext();
			DataSource ds = (DataSource)initContext.lookup("java:agencia-db");
			conn = ds.getConnection();
			conn.setAutoCommit(false);			
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	public static PersistenciaVentaAgencia getInstance(){
		
		if(instance == null){ //verifica si existe una instancia de la persistencia, sino devuelve la creada anteriormente
			instance = new PersistenciaVentaAgencia();
			
		}/*else{
			try {
			Context initContext = new InitialContext();
			DataSource ds = (DataSource)initContext.lookup("java:imm-db");
			conn = ds.getConnection();
			conn.setAutoCommit(false);			
		} catch (NamingException e) {
			System.out.println("SrvImm.Persistencia.PersistenciaVenta.PersistenciaVentaImm NamingException");
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("SrvImm.Persistencia.PersistenciaVenta.PersistenciaVentaImm SQLException");
			e.printStackTrace();
		}
		}*/
		return instance;
	}

	public boolean validarTerminal(DataTicket unTicket) {
		boolean retorno = false;
		try{
			PreparedStatement ps = conn.prepareStatement("Select * from terminal where idTerminal = " +unTicket.getId_terminal());
			ResultSet rs = ps.executeQuery();
			if(rs.next()){
				System.out.println("SrvAge.Persistencia.PersistenciaVentaTicket.ValidarTerminal Select * from terminal id=<"+rs.getString("IdTerminal") + "> <" +rs.getString("nombreTerminal")+"> ");
				retorno = true;
				
			}
		}catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return retorno;
	}

	public boolean guardarTicket(DataTicketVendido TicketVenta,	DataTicket unTicket) {
		boolean retorno 	 = false;
		long idTicketVendido = TicketVenta.getIdTicket();
		try{
		PreparedStatement ps = conn.prepareStatement("Insert into ticket values(" + idTicketVendido+")");
		int res				 = ps.executeUpdate();
		conn.commit(); //sino salta el error de integridad referencial al insertar vendido
		if (res > 0){
			Date Fecha_Venta =null;
			if(unTicket.getFecha_venta()!=null){
				Fecha_Venta = unTicket.getFecha_venta();
			}
			Date Fecha_Inicio =null;
			if(unTicket.getFecha_inicio()!=null){
				Fecha_Inicio = unTicket.getFecha_inicio(); //java.util.Date cannot be cast to java.sql.Date
			}
			int Cant_Min 	= unTicket.getCant_min();
			long idAgencia 	= unTicket.getId_agencia();
			float importe 	= TicketVenta.getImporte();
			String matricula = unTicket.getMatricula();
			
			
			PreparedStatement ps3 = conn.prepareStatement("Insert into Vendido values(?,?,?,?,?,?,?,?)");
			ps3.setLong(1,idTicketVendido);
			ps3.setTimestamp(2,(new java.sql.Timestamp(Fecha_Venta.getTime())) );
			ps3.setTimestamp(3,(new java.sql.Timestamp(Fecha_Inicio.getTime())) );
			ps3.setString(4,matricula);
			ps3.setInt(5,Cant_Min);
			ps3.setFloat(6,importe);
			ps3.setString(7, "1");
			ps3.setLong(8,idAgencia);
			res= ps3.executeUpdate();
			if (res > 0){
				conn.commit();
				//conn.close();
				ps.close();
				ps3.close();
				retorno = true;
				return retorno;
			}else{
				System.out.println("SrvAge.Persistencia.PersistenciaVentaTicket.guardarTicket hacer el roolback, eliminar el ticketID="+idTicketVendido);
				}			
		}	
				
	}catch (SQLException e) {
		System.out.println("SrvAge.Persistencia.PersistenciaVentaTicket.guardarTicket ");
		e.printStackTrace();
	}	
		return retorno;
	}

}
